//package down.sallai.ml.services;
//
//import com.alibaba.fastjson.JSON;
//import org.apache.commons.logging.Log;
//import org.apache.commons.logging.LogFactory;
//import org.springframework.stereotype.Component;
//
//import javax.servlet.http.HttpSession;
//import javax.websocket.*;
//import javax.websocket.server.ServerEndpoint;
//import java.io.IOException;
//import java.util.ArrayList;
//import java.util.Set;
//import java.util.concurrent.ConcurrentHashMap;
//
///**
// * @description: $
// * @author: sallai
// * @time: 2022年1月27日 0027 下午 11:17:40 秒
// */
//@ServerEndpoint(value="/stream",configurator = GetHttpSessionConfigurator.class)
//@Component
//public class ChatService {
//
//
//    private static Log log = LogFactory.getLog(ChatService.class);
//    private Session session;
//    private HttpSession httpSession;
//    private UserBean userBean = null;
//    /*
//     *发送广播
//     *
//     *
//     * */
//
//
//    private void sendtoAll(){
//
//    }
//
//    private void sendtoUser(SocketMessageBean socketMessageBean){
//        try {
//            ConcurrentHashMap<Integer, ChatService> onlineUserList = ChatSessionUtils.getOnlineUserList();
//            if (!onlineUserList.containsKey(socketMessageBean.getTo())) {
//                ChatSessionUtils.setNoReadMsg(socketMessageBean);
//                session.getBasicRemote().sendText(SocketMessageBean.buildMessage(SocketMessageBean.SYSTEM_MSG, "用户未上线,消息暂存服务端", "text",-1, userBean.getId(), -1));
//                return;
//            }
//
//            onlineUserList.get(socketMessageBean.getTo()).session.getBasicRemote().sendText(JSON.toJSONString(socketMessageBean));
//        }catch (Exception e){
//            System.out.println("发送消息出现异常-》"+e);
//        }
//    }
//
//
//    /**
//     * 打开连接时触发
//     *
//     *
//     * @param session
//     */
//
//    @OnOpen
//    public void onOpen(Session session, EndpointConfig config) {
//
//        HttpSession httpSession = (HttpSession) config.getUserProperties().get(HttpSession.class.getName());
//        if(httpSession==null){
//            try {
//                session.close();
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//            return ;
//        }
//        Object user = httpSession.getAttribute("user");
//        if(null==user)  {System.out.println("未登陆"); return;}
//        UserBean userBean = (UserBean) user;
//        this.userBean = userBean;
//
//        System.out.println(userBean.toString());
//        this.session = session;
//        this.httpSession = httpSession;
//        SocketMessageBean msg = new SocketMessageBean(SocketMessageBean.SYSTEM_MSG, "用户" + userBean.getName() + "上线","text", -1, -1, -1);
//        sendtoAll(msg);
//        ChatSessionUtils.getOnlineUserList().put(userBean.getId(),this);
//        System.out.println("用户"+userBean.getName()+"上线=>线上用户数"+ChatSessionUtils.getOnlineUserList().size());
//        checkAndSendNoReadMsg(userBean.getId());
//    }
//
//    /**
//     * 收到客户端消息时触发
//     *
//     * @param message
//     * @param message
//     * @return
//     */
//
//    @OnMessage
//    public void onMessage(byte[] message,Session session) {
//        System.out.println("接收到消息->"+message+" session=>"+session.toString());
//        if(message.equals("ping")) {
//            try {
//                session.getBasicRemote().sendText("pong");
//                return;
//            } catch (IOException e) {
//                e.printStackTrace();
//                return;
//            }
//        }
//
//        SocketMessageBean socketMessageBean = null;
//        try{
//            socketMessageBean = JSON.parseObject(message,SocketMessageBean.class);
//        }catch (Exception e){
//            System.out.println("消息解析到SocketMessageBean出现错误");
//        }
//
//        switch (socketMessageBean.getType()){
//            case SocketMessageBean.SYSTEM_MSG:
//                sendtoAll(socketMessageBean);
//                break;
//            case SocketMessageBean.USER_MSG:
//            case SocketMessageBean.WEBRTC_MSG:
//                sendtoUser(socketMessageBean);
//                break;
//            case SocketMessageBean.GROUP_MSG:
//
//            default:
//                break;
//        }
//
//
//    }
//
//
//    @OnMessage
//    public void onMessage(String message,Session session) {
//        System.out.println("接收到消息->"+message+" session=>"+session.toString());
//        if(message.equals("ping")) {
//            try {
//                session.getBasicRemote().sendText("pong");
//                return;
//            } catch (IOException e) {
//                e.printStackTrace();
//                return;
//            }
//        }
//
//        SocketMessageBean socketMessageBean = null;
//        try{
//            socketMessageBean = JSON.parseObject(message,SocketMessageBean.class);
//        }catch (Exception e){
//            System.out.println("消息解析到SocketMessageBean出现错误");
//        }
//
//        switch (socketMessageBean.getType()){
//            case SocketMessageBean.SYSTEM_MSG:
//                sendtoAll(socketMessageBean);
//                break;
//            case SocketMessageBean.USER_MSG:
//            case SocketMessageBean.WEBRTC_MSG:
//                sendtoUser(socketMessageBean);
//                break;
//            case SocketMessageBean.GROUP_MSG:
//
//            default:
//                break;
//        }
//
//
//    }
//
//    /**
//     * 异常时触发
//     *
//
//     * @param session
//     */
//    @OnError
//    public void onError(Throwable throwable, Session session) {
////        log.info("Websocket Connection Exception:"
////                + ChatSessionUtils.getKey(loginId));
//        log.info(throwable.getMessage(), throwable);
////        ChatSessionUtils.remove(loginId);
//        try {
//            session.close();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 关闭连接时触发
//     *
//
//     * @param session
//     */
//    @OnClose
//    public void onClose(Session session) {
//        if(userBean==null) return;
//        if(ChatSessionUtils.getOnlineUserList().containsKey(userBean.getId())) ChatSessionUtils.getOnlineUserList().remove(userBean.getId());
//        System.out.println("用户"+userBean.getName()+"下线");
//        try {
//            session.close();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//
//    }
//
//    //    用户上线后，检查是否有未读消息
//    private void checkAndSendNoReadMsg(int id){
//        ArrayList<SocketMessageBean> noReadMsg = ChatSessionUtils.getNoReadMsg(id);
//        if(null==noReadMsg) return;
//        noReadMsg.stream().forEach((item)->{
//            sendtoUser(item);
//        });
//        System.out.println("用户"+userBean.getName()+noReadMsg.size()+"未读消息发送完毕");
//    }
//
//
//
//
//}
